import type {
  EntityApi,
  EntityPage,
  EntityReq,
  EntityModel,
  EntityTotal,
  EntityList,
  EntityImportReq,
  EntityExportReq,
  EntityKey,
  EntityKeyList,
  EntityCreateReq,
  EntityUpdateReq,
} from "jmash-core";

/**
 * 登录用户信息
 */
export interface UserInfo {
  // 用户ID（可选）
  userId?: string;
  // 用户名（可选）
  userName?: string;
  // 昵称（可选）
  nickName?: string;
  // 头像（可选）
  avatar?: string;
  // 租户
  tenant: string;
  // 角色权限列表
  roleCodes: string[];
  // 操作权限列表
  permCodes: string[];
}

export interface UserApi extends EntityApi {}

// 用户查询
export interface UserReq extends EntityReq {
  // 租户
  tenant?: string;
  // 是否显示已删除用户（可选）
  showDeleted?: boolean;
  // 创建用户ID
  createBy?: string;
  // 所属部门ID（可选）
  deptId?: string;
  // 用户名（可选）
  loginName?: string;
  // 是否显示用户状态（可选）
  hasUserStatus?: boolean;
  // 用户状态（可选）
  userStatus?: string;
  // 角色编码
  roleCode?: string;
  // 目录ID（可选）
  directoryId?: string;
  // 姓名
  realName?: string;
  // 昵称模糊查询
  likeNickName?: string;
}

// 用户实体
export interface UserModel extends EntityModel {
  // 账号
  userId: string;
  // 目录ID
  directoryId?: string;
  // 用户名/登录名
  loginName?: string;
  // 手机号
  mobilePhone?: string;
  // 手机号脱敏
  mobilePhoneIns?: string;
  // 电子邮件
  email?: string;
  // 姓名
  realName?: string;
  // 昵称
  nickName?: string;
  // 头像
  avatar?: string;
  // 出生日期
  birthDate?: string;
  // 性别
  gender?: string;
  // 手机通过审核
  phoneApproved?: boolean;
  // 邮箱通过审核
  emailApproved?: boolean;
  // 用户通过审核
  approved?: boolean;
  // 用户状态
  status?: string;
  // 上次被锁/禁用时间
  lastLockoutTime?: string;
  // 登录失败时间
  failedTime?: string;
  // 登录失败次数
  failedCount?: number;
  // 上次登录时间
  lastLoginTime?: string;
  // 乐观锁
  vision?: number;
  // 创建人
  createBy?: string;
  // 创建时间
  createTime?: string;
  // 更新人
  updateBy?: string;
  // 更新时间
  updateTime?: string;
  // 删除人
  deleteBy?: string;
  // 删除状态
  deleted?: boolean;
  // 删除时间
  deleteTime?: string;
  // 手机号脱敏
  mobileEncrypt?: boolean;
  unifiedId?: string;
}

// 用户管理分页
export interface UserPage extends EntityPage {
  // 页数
  curPage: number;
  // 条数
  pageSize: number;
  // 当前页内容
  results: Array<UserModel>;
  // 总记录数
  totalSize: number;
  // 本页小计
  subTotalDto: UserModelTotal;
  // 合计
  totalDto: UserModelTotal;
}
// 根据部门选择人员分页信息
export interface UserPageNew extends EntityPage {
  // 页数
  curPage: number;
  // 条数
  pageSize: number;
  // 当前页内容
  results: Array<SelectUsersModel>;
  // 总记录数
  totalSize: number;
  // 本页小计
  subTotalDto: UserModelTotal;
  // 合计
  totalDto: UserModelTotal;
}
// 用户列表
export interface UserList extends EntityList {
  // 当前页内容
  results: Array<UserModel>;
}

// 合计
export interface UserModelTotal extends EntityTotal {
  // 总记录数
  totalSize: number;
}

// 用户管理主键
export interface UserKey extends EntityKey {
  // 租户
  tenant?: string;
  userId?: string;
}

// 用户管理Key List
export interface UserKeyList extends EntityKeyList {
  // 租户
  tenant?: string;
  // 用户ID
  userId?: Array<string>;
}

// 用户管理新增实体
export interface UserCreateReq extends EntityCreateReq {
  // 租户（可选）
  tenant?: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 重复输入的密码（新增时需提供）
  repeatPwd?: string;
  // 头像（可选）
  avatar?: string;
  // 目录ID（可选）
  directoryId?: string;
  // 用户名（可选）
  loginName?: string;
  // 昵称（可选）
  nickName?: string;
  // 姓名（可选）
  realName?: string;
  // 出生日期（可选）
  birthDate?: string;
  // 性别（可选）
  gender?: string;
  // 手机号（可选）
  mobilePhone?: string;
  // 所属角色ID列表
  roleIds?: string[];
  // 邮箱（可选）
  email?: string;
  // 用户状态（可选）
  status?: string;
  // 密码（新增时需提供，编辑时可选）
  pwd?: string;
  // 所属部门与岗位信息列表（可选）
  userJobs?: UserJobsItem[];
  // 手机号是否已验证（可选）
  phoneApproved?: boolean;
  // 邮箱是否已验证（可选）
  emailApproved?: boolean;
  // 是否是平台用户
  createPlatformUser?: boolean,
  // 平台租户
  platformTenant?: string;
  // 用户是否审核通过
  approved?: boolean;
}

// 用户管理更新实体
export interface UserUpdateReq extends EntityUpdateReq {
  // 租户（可选）
  tenant?: string;
  // 更新字段掩码（用于指定更新哪些字段，可选）
  updateMask: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 用户ID（编辑时需提供）
  userId?: string;
  // 头像（可选）
  avatar?: string;
  // 目录ID（可选）
  directoryId?: string;
  // 用户名（可选）
  loginName?: string;
  // 昵称（可选）
  nickName?: string;
  // 姓名（可选）
  realName?: string;
  // 出生日期（可选）
  birthDate?: string;
  // 性别（可选）
  gender?: string;
  // 手机号（可选）
  mobilePhone?: string;
  // 所属角色ID列表
  roleIds?: string[];
  // 邮箱（可选）
  email?: string;
  // 用户状态（可选）
  status?: string;
  // 所属部门与岗位信息列表（可选）
  userJobs?: UserJobsItem[];
  // 手机号是否已验证（可选）
  phoneApproved?: boolean;
  // 邮箱是否已验证（可选）
  emailApproved?: boolean;
  // 是否是平台用户
  createPlatformUser?: boolean,
  // 平台租户
  platformTenant?: string;
  // 用户是否审核通过
  approved?: boolean;
}

export type UserFormReq = UserCreateReq | UserUpdateReq;

// 导入请求
export interface UserImportReq extends EntityImportReq {
  // 租户
  tenant: string;
  // 用于检测重复请求的唯一字符串ID
  requestId: string;
  // 文件名
  fileNames?: string;
  // 是否新增标识
  addFlag?: boolean;
  // 更新字段掩码.
  updateMask: string;
}

// 导出请求
export interface UserExportReq extends EntityExportReq {
  // 租户
  tenant: string;
  // 标题
  title?: string;
  // 显示文件名
  fileName?: string;
  // 筛选条件
  req: UserReq;
}

// 启用/禁用
export interface UserEnableKey {
  // 租户
  tenant?: string;
  // 是否启用
  enabled?: boolean;
  // 组织ID
  userId?: string;
}

// 批量启禁用用户请求.
export interface UserEnableKeyList {
  // 租户.
  tenant?: string;
  // 启用/禁用
  enabled?: boolean;
  // 用户Id
  userId?: string[];
}

// 所属部门与岗位信息项
interface UserJobsItem {
  // 部门ID
  deptId: string;
  // 岗位ID
  jobId: string;
}

// 重置密码
export interface UserResetPwdReq {
  // 租户.
  tenant?: string;
  // 用户Id
  userId: string;
  // 密钥
  pwd: string;
  // 重复密钥
  repeatPwd: string;
}

// 三方登录主键
export interface OpensKey {
  // 租户.
  tenant?: string;
  appId?: string;
  userId?: string;
  openId?: string;
}

// 锁/解锁用户请求.
export interface UserLockReq {
  // 租户.
  tenant?: string;
  // 锁/解锁
  lock: boolean;
  // 用户Id
  userId: string[];
}

// 审核/取消审核请求.
export interface UserApprovedReq {
  // 租户.
  tenant?: string;
  // 审核/取消审核
  approved?: string;
  // 用户Id
  userId?: string[];
}

// 目录实体
export interface DirectoryModel {
  directoryId?: Array<string>;
}

// 第三方登录信息列表实体
export interface UserOpenModel {
  // OpenID
  openId?: string;
  // 账号ID
  userId?: string;
  // 应用ID
  appId: string;
  // 唯一ID
  unionId?: string;
  // 昵称
  nickName?: string;
  // 三方OpenID Type
  openType: string;
  // 创建人
  createBy?: string;
}

// 第三方登录信息列表
export interface UserOpenList extends EntityList {
  // 当前页内容
  results: Array<UserOpenModel>;
}

// 选择人员下拉列表实体
export interface SelectUsersModel {
  // 人员ID
  key: string;
  // 人员姓名
  value: string;
  // 部门ID
  deptId?: string;
  // 部门名称
  deptName?: string;
  // 岗位名称/部门职务
  jobName?: string;
  // 岗位ID
  jobId?: string;
}
// 选择人员下拉列表查询
export interface SelectUsersReq {
  // 租户.
  tenant?: string;
  // 多个用户人员ID
  userId?: Array<string>;
  // 部门ID
  deptId?: string;
}

export interface SelectUsersList extends EntityList {
  // 内容
  results: Array<SelectUsersModel>;
}

export interface DeptTreeSelecReq extends EntityReq {
  // 租户.
  tenant?: string;
  // 部门id
  deptId?: string;
}

export interface UserChooseModel extends EntityModel {
  // 人员ID
  key?: string;
  // 人员姓名
  value?: string;
  // 部门ID
  deptId?: string;
  // 部门名称
  deptName?: string;
  // 岗位名称/部门职务
  jobName?: string;
  // 岗位ID
  jobId?: string;
  // 手机号脱敏字段
  mobileEncrypt?: boolean;
}

export interface UserChoosePage extends EntityPage {
  // 页数
  curPage: number;
  // 条数
  pageSize: number;
  // 当前页内容
  results: Array<UserChooseModel>;
  // 总记录数
  totalSize: number;
  // 本页小计
  subTotalDto: UserChooseModelTotal;
  // 合计
  totalDto: UserChooseModelTotal;
}
// 合计
export interface UserChooseModelTotal extends EntityTotal {
  // 总记录数
  totalSize: number;
}

// 新增平台用户请求
export interface UserPlatformAddReq extends EntityReq {
  // 组织租户
  tenant?: string;
  // 平台租户
  platformTenant?: string;
  // 检测重复请求
  requestId?: string;
  // 用户id
  userId?: string;
  // 目录id
  directoryId?: string;
}
